package com.example.shiro.bean;

import com.sun.org.apache.xpath.internal.operations.Bool;
import lombok.Data;

import javax.persistence.*;
import java.util.List;

/**
 * Copyright(C), 2020-2021, AmbroseCdMeng
 * FileName:    SysRole
 * Author:      AmbroseCdMeng
 * Date:        2021/2/24 16:47
 * Description: 角色实体。角色实体是管理员角色，用于对管理员分组，并通过权限表映射来确定管理员的权限
 * History:
 * <author>     <time>      <version>       <desc>
 * 作者姓名     修改时间        版本号           描述
 */
@Entity
@Data
public class SysRole {
    @Id
    @GeneratedValue
    private Integer id;
    @Column(unique = true)
    private String role;    // 角色标识程序中判断使用，如 admin， 是唯一的
    private String description; // 角色描述。UI 界面使用
    private Boolean available = Boolean.FALSE;  // 角色是否可用，如果不可用，则不会添加给用户

    /**
     * 角色权限关系：多对多
     */
    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "SysRolePermission", joinColumns = {@JoinColumn(name = "roleId")}, inverseJoinColumns = {@JoinColumn(name = "permissionId")})
    private List<SysPermission> permissions;

    /**
     * 用户角色关系定义。一个角色对应多个用户
     */
    @ManyToMany
    @JoinTable(name = "SysUserRole", joinColumns = {@JoinColumn(name = "roleId")}, inverseJoinColumns = {@JoinColumn(name = "uid")})
    private List<Admin> admins;
}
